<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <link rel="stylesheet" href="index.css">
  <script src="https://unpkg.com/react@18/umd/react.development.js"></script>
  <script src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/babel-standalone/6.26.0/babel.min.js"></script>
</head>

<body>
  <div id="app"></div>
  <script type="text/babel">

    // 定义类式组件
    class TodoList extends React.Component {
      constructor(props) {
        super(props);
        // 初始化state
        this.state = {
          inputText: '',
          todoList: []
        };
      }

      // 处理文本框变化
      handleInputChange = (e) => {
        //当你传入一个对象时，this.setState 会直接合并这个对象到当前的状态中，React 会对已存在的状态属性进行更新或添加新的属性。
        this.setState({ inputText: e.target.value });
      };

      // 添加todo
      addTodo = () => {
        const newTodo = { key: new Date().getTime(), content: this.state.inputText };
        this.setState(prevState => ({
          todoList: [newTodo, ...prevState.todoList],
          inputText: ''
        }));
      };

      // 删除todo
      deleteTodo = (key) => {
        //当你传递一个回调函数时，this.setState 会接收该函数，函数会接收两个参数：
        // prevState：之前的状态
        // props：当前的 props
        // 回调函数的返回值应该是一个新的状态对象
        this.setState(prevState => ({
          todoList: prevState.todoList.filter(item => item.key !== key)
        }));
      };

      render() {
        return (
          <div className="todo-list">
            <h1>Todo List</h1>
            <div className="content">
              <input
                type="text"
                value={this.state.inputText}
                onChange={this.handleInputChange}
              />
              <button onClick={this.addTodo}>Add</button>
            </div>
            <ul>
              {this.state.todoList.map((item) => (
                <li key={item.key}>
                  {item.content}
                  <button onClick={() => this.deleteTodo(item.key)}>Delete</button>
                </li>
              ))}
            </ul>
          </div>
        );
      }
    }

    // 将组件渲染到指定的DOM元素（id为app的元素）上
    ReactDOM.render(<TodoList />, document.getElementById('app'));

  </script>
</body>

</html>